package reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

/**
 * 反射bean包下Student类当中所有的Field。
 */
public class ReflectTest05 {
    public static void main(String[] args) throws ClassNotFoundException {
        // 获取整个类
        Class<?> studentClass = Class.forName("bean.Student");

        // 拿到类名
        String name1 = studentClass.getName();
        System.out.println("完整类名: " + name1);
        String simpleName = studentClass.getSimpleName();
        System.out.println("简单类名" + simpleName);

        // 获取类中所有 (public修饰) 的Field
        Field[] fields = studentClass.getFields();
        // 测试数组中只有1个元素
        System.out.println(fields.length);
        // 取出这个Field
        Field field = fields[0];
        // 取出这个Field它的名字
        String name = field.getName();
        System.out.println(name);

        // 获取所有的Field
        Field[] declaredFields = studentClass.getDeclaredFields();
        System.out.println(declaredFields.length);
        for (Field declaredField : declaredFields) {
            // 获取Field的类型
            System.out.println(declaredField.getType().getTypeName());

            // 返回的修饰符是一个数字，每个数字是修饰符的代号。
            int modifiers = declaredField.getModifiers();
            // 可以将这个代号转换成“字符串”
            System.out.println(modifiers);
            String s = Modifier.toString(modifiers);
            System.out.println(s);

            // 获取Field的名字
            System.out.println(declaredField.getName());

        }
    }
}
